package com.summer.filesync.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/** 字符串工具类 提供字符串相关的通用操作方法 */
public class StringUtils {

  private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  /** 检查字符串是否为空 */
  public static boolean isEmpty(String str) {
    return str == null || str.trim().isEmpty();
  }

  /** 检查字符串是否不为空 */
  public static boolean isNotEmpty(String str) {
    return !isEmpty(str);
  }

  /** 生成UUID */
  public static String generateUUID() {
    return UUID.randomUUID().toString();
  }

  /** 生成短UUID（去掉连字符） */
  public static String generateShortUUID() {
    return UUID.randomUUID().toString().replace("-", "");
  }

  /** 格式化文件大小 */
  public static String formatFileSize(long size) {
    if (size < 1024) {
      return size + " B";
    } else if (size < 1024 * 1024) {
      return String.format("%.1f KB", size / 1024.0);
    } else if (size < 1024 * 1024 * 1024) {
      return String.format("%.1f MB", size / (1024.0 * 1024));
    } else {
      return String.format("%.1f GB", size / (1024.0 * 1024 * 1024));
    }
  }

  /** 格式化时间戳 */
  public static String formatTimestamp(long timestamp) {
    return DATE_FORMAT.format(new Date(timestamp));
  }

  /** 路径标准化 */
  public static String normalizePath(String path) {
    if (isEmpty(path)) {
      return path;
    }

    // 统一使用正斜杠
    String normalized = path.replace('\\', '/');

    // 处理多个连续的斜杠
    normalized = normalized.replaceAll("/+", "/");

    // 移除末尾的斜杠（除非是根路径）
    if (normalized.length() > 1 && normalized.endsWith("/")) {
      normalized = normalized.substring(0, normalized.length() - 1);
    }

    return normalized;
  }

  /** 安全的字符串比较 */
  public static boolean equals(String str1, String str2) {
    if (str1 == null && str2 == null) {
      return true;
    }
    if (str1 == null || str2 == null) {
      return false;
    }
    return str1.equals(str2);
  }

  /** 获取文件名（不包含路径） */
  public static String getFileName(String filePath) {
    if (isEmpty(filePath)) {
      return "";
    }

    String normalizedPath = normalizePath(filePath);
    int lastSlashIndex = normalizedPath.lastIndexOf('/');

    if (lastSlashIndex == -1) {
      return normalizedPath;
    }

    return normalizedPath.substring(lastSlashIndex + 1);
  }

  /** 获取父目录路径 */
  public static String getParentPath(String filePath) {
    if (isEmpty(filePath)) {
      return "";
    }

    String normalizedPath = normalizePath(filePath);
    int lastSlashIndex = normalizedPath.lastIndexOf('/');

    if (lastSlashIndex == -1) {
      return "";
    }

    return normalizedPath.substring(0, lastSlashIndex);
  }

  /** 截断字符串到指定长度 */
  public static String truncate(String str, int maxLength) {
    if (str == null || str.length() <= maxLength) {
      return str;
    }

    return str.substring(0, maxLength - 3) + "...";
  }

  /** 字符串左填充 */
  public static String leftPad(String str, int length, char padChar) {
    if (str == null) {
      str = "";
    }

    if (str.length() >= length) {
      return str;
    }

    StringBuilder sb = new StringBuilder();
    for (int i = str.length(); i < length; i++) {
      sb.append(padChar);
    }
    sb.append(str);

    return sb.toString();
  }

  /** 字符串右填充 */
  public static String rightPad(String str, int length, char padChar) {
    if (str == null) {
      str = "";
    }

    if (str.length() >= length) {
      return str;
    }

    StringBuilder sb = new StringBuilder(str);
    for (int i = str.length(); i < length; i++) {
      sb.append(padChar);
    }

    return sb.toString();
  }
}
